/**
 * Copyright (C) 2016 Juno Inc., All Rights Reserved.
 */
package com.jyl.designPattern.creational.singleton;

/**
 *
 * @author Long, E-mail:jyl0401@163.com
 * @date 2016年7月19日 下午1:52:31
 */
public class Singleton {
	
	//懒汉式-线程不安全
	/*private static Singleton singleton;
	
	private Singleton(){
		
	}
	
	public static Singleton getInstance(){
		if(singleton == null){
			singleton = new Singleton();
		}
		return singleton;
	}*/
	
	//懒汉式-线程安全，但每次实例化都要同步，会影响性能（毕竟大多数情况下不用同步）
	/*private static Singleton singleton;
	
	private Singleton(){
		
	}
	
	public static synchronized Singleton getInstance(){
		if(singleton == null){
			singleton = new Singleton();
		}
		return singleton;
	}*/
	
	//饿汉式-线程安全，类创建时已经加载，会占用一定的内存空间，丢失了延迟实例带来的节约资源的优势
	/*private static Singleton singleton = new Singleton();
	
	private Singleton(){
		
	}
	
	public static Singleton getInstance(){
		return singleton;
	}*/
	
	
	//双重锁校验-线程安全，只有第一次调用单例的时候做同步，避免了每次都要同步的性能损耗
	/*private volatile static Singleton singleton;
	
	private Singleton(){
		
	}
	
	public static Singleton getInstance(){
		if(singleton == null){
			synchronized(Singleton.class) {
				//如果两个线程同时进入就会执行两次，因此这里需要再次判断
				if(singleton == null){
					singleton = new Singleton();   
	            }    
	        }    
		}
		return singleton;
	}*/
	
	
	//静态内部类实现-线程安全，利用ClassLoader的机制来保证初始化instance时只有一个线程，没有性能损耗
	/*private static class LazyHolder{
		private static Singleton INSTANCE = new Singleton();
	}
	
	private Singleton(){
		
	}
	
	public static Singleton getInstance(){
		return LazyHolder.INSTANCE;
	}*/

}
